/**
 * 
 */
package com.laozhao.test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TabbedPaneExample implements ActionListener {
	private JFrame frame;
	private JTabbedPane tabbedPane;
	private JButton addTabButton;
	private ImageIcon closeXIcon;
	private Dimension closeButtonSize;
	private int tabCounter = 0;

	public TabbedPaneExample() {
		
        // 创建选项卡面板
        tabbedPane = new JTabbedPane();
        // 创建一个按钮-用户可用来添加一个选项卡到选项卡面板
        addTabButton = new JButton("Add Tab");
        addTabButton.setToolTipText("关闭");
        addTabButton.addActionListener(this);
        // 创建一个框架来包含这个选项卡面板
        frame = new JFrame();
        // 创建一个图像图标'X'以实现在每一个选项卡上的关闭功能。加载的gif是一个10x10图形（非黑色部分是透明的）
        closeXIcon = new ImageIcon("d:/close.gif");
        // 创建一个Dimension用来调整close按钮的大小
        closeButtonSize = new Dimension(
        closeXIcon.getIconWidth()+2,closeXIcon.getIconHeight()+2);
        // 所选项卡面板添加到图形中央，把"Add Tab"按钮置于南面。然后包装它，调整其大小并显示它。
        frame.add(tabbedPane,BorderLayout.CENTER);
        frame.add(addTabButton,BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setMinimumSize(new Dimension(300,300));
        frame.setVisible(true);
    }

	public void actionPerformed(ActionEvent e) {
		
        final JPanel content = new JPanel();
        // 创建一个描述该选项卡的面板并确保它是透明的
        JPanel tab = new JPanel();
        tab.setOpaque(false);
        // 为该选项卡创建一个标签和一个Close按钮。一定要
        // 把它的尺寸设置为几乎该图标的大小，并且
        // 创建一个行为听取器-它将定位该选项卡并且从选项卡面板上删除它
        JLabel tabLabel = new JLabel("Tab " + (++tabCounter));
        JButton tabCloseButton = new JButton(closeXIcon);
        tabCloseButton.setPreferredSize(closeButtonSize);
        tabCloseButton.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
                      int closeTabNumber = tabbedPane.indexOfComponent(content);
                      tabbedPane.removeTabAt(closeTabNumber);
                 }
              });
        tab.add(tabLabel,BorderLayout.WEST);
        tab.add(tabCloseButton,BorderLayout.EAST);
       // 把该选项卡添加到选项卡面板。注意，
       // 第一个参数（它正常是一个描述选项卡标题的String
        // ），为null.
        tabbedPane.addTab(null,content);
       // 不是在选项卡上使用String/Icon的结合，
        // 而是使用我们的面板。
        tabbedPane.setTabComponentAt(tabbedPane.getTabCount()-1, tab);
       }

	public static void main(String[] args) {
		TabbedPaneExample main = new TabbedPaneExample();
	}
}